#include <ESP8266httpUpdate.h>

// 当升级中，打印日志
void update_progress(int cur, int total)
{
    digitalWrite(LedBlink, !digitalRead(LedBlink)); // 切换指示灯状态
    if (cur == total)
    {
        digitalWrite(LedBlink, HIGH); // 切换指示灯状态
    }
    Serial.printf("CALLBACK:  HTTP update process at %d of %d bytes...\n", cur, total);
}
/**
 * 固件升级函数
 * 在需要升级的地方，加上这个函数即可，例如setup中加的updateBin();
 * 原理：通过http请求获取远程固件，实现升级
 */
void updateBin()
{
    String upUrl = "http://bin.bemfa.com/b/3BcNDg5MmJkN2ZlMDA1ZWNiYmNjZjM1OTI5MTU3ZWM3ZTc=" + TOPIC1 + ".bin"; // OTA固件链接，请替换为自己的固件链接，如果接收到msg=update，开始执行固件升级

    Serial.println("start update");
    WiFiClient UpdateClient;
    ESPhttpUpdate.onProgress(update_progress); // 当升级中
    t_httpUpdate_return ret = ESPhttpUpdate.update(UpdateClient, upUrl);
    switch (ret)
    {
    case HTTP_UPDATE_FAILED: // 当升级失败
        Serial.println("[update] Update failed.");
        break;
    case HTTP_UPDATE_NO_UPDATES: // 当无升级
        Serial.println("[update] Update no Update.");
        break;
    case HTTP_UPDATE_OK: // 当升级成功
        Serial.println("[update] Update ok.");
        break;
    }
}
